<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>Zend_Config_Xml - Zend Framework Manual</title>

    <link href="../css/shCore.css" rel="stylesheet" type="text/css" />
    <link href="../css/shThemeDefault.css" rel="stylesheet" type="text/css" />
    <link href="../css/styles.css" media="all" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>Zend Framework</h1>
<h2>Programmer's Reference Guide</h2>
<ul>
    <li><a href="../en/zend.config.adapters.xml.html">Inglês (English)</a></li>
    <li><a href="../pt-br/zend.config.adapters.xml.html">Português Brasileiro (Brazilian Portuguese)</a></li>
</ul>
<table width="100%">
    <tr valign="top">
        <td width="85%">
            <table width="100%">
                <tr>
                    <td width="25%" style="text-align: left;">
                    <a href="zend.config.adapters.json.html">Zend_Config_Json</a>
                    </td>

                    <td width="50%" style="text-align: center;">
                        <div class="up"><span class="up"><a href="zend.config.html">Zend_Config</a></span><br />
                        <span class="home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></span></div>
                    </td>

                    <td width="25%" style="text-align: right;">
                        <div class="next" style="text-align: right; float: right;"><a href="zend.config.adapters.yaml.html">Zend_Config_Yaml</a></div>
                    </td>
                </tr>
            </table>
<hr />
<div id="zend.config.adapters.xml" class="section"><div class="info"><h1 class="title">Zend_Config_Xml</h1></div>
    

    <p class="para">
        <span class="classname">Zend_Config_Xml</span> permite aos desenvolvedores armazenarem os dados de
        configuração em um formato <acronym class="acronym">XML</acronym> simples e lê-los através de uma sintaxe
        de propriedade de objeto aninhado. O nome do elemento raiz do arquivo ou string
        <acronym class="acronym">XML</acronym> é irrelevante e pode ser escolhido. O primeiro nível dos elementos
        <acronym class="acronym">XML</acronym> corresponde às seções de dados de configuração. O formato
        <acronym class="acronym">XML</acronym> suporta organização hierárquica para o aninhamento dos elementos
        <acronym class="acronym">XML</acronym> abaixo dos elementos de seção-nível. O conteúdo de uma folha de
        elemento <acronym class="acronym">XML</acronym> (leaf) corresponde ao valor de um dado de configuração.
        Herança de seção é suportada por um atributo <acronym class="acronym">XML</acronym> especial chamado
        <em class="emphasis">extends</em>, e o valor deste atributo corresponde à seção a que a
        informação deve ser herdada.
    </p>

    <blockquote class="note"><p><b class="note">Note</b>: <span class="info"><b>Tipo de Retorno</b><br /></span>
        

        <p class="para">
            Os dados de configuração lidos em <span class="classname">Zend_Config_Xml</span> são sempre
            retornados como strings. A conversão de dados de strings para outros tipos é deixado
            para os desenvolvedores de acordo com suas necessidades específicas.
        </p>
    </p></blockquote>

    <div class="example" id="zend.config.adapters.xml.example.using"><div class="info"><p><b>Example #1 Usando o Zend_Config_Xml</b></p></div>
        

        <div class="example-contents"><p>
            Este exemplo ilustra uma utilização básica de <span class="classname">Zend_Config_Xml</span>
            para carregar dados de configuração de um arquivo <acronym class="acronym">XML</acronym>. Neste
            exemplo, existem dados de configuração, tanto para um sistema de produção como para um
            sistema de testes. Pois os dados de configuração de um sistema de testes são muito
            semelhantes aos de produção, a seção de testes herda da seção de produção. Neste caso,
            a decisão é arbitrária e poderia ter sido escrita de modo inverso, com a seção de
            produção herdando da seção de testes, embora isso possa não ser o caso em situações
            mais complexas. Suponha-se, então, que os dados de configuração a seguir estão
            contidos em <var class="filename">/path/to/config.xml</var>:
        </p></div>

        <pre class="programlisting brush: xml">
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;configdata&gt;
    &lt;production&gt;
        &lt;webhost&gt;www.example.com&lt;/webhost&gt;
        &lt;database&gt;
            &lt;adapter&gt;pdo_mysql&lt;/adapter&gt;
            &lt;params&gt;
                &lt;host&gt;db.example.com&lt;/host&gt;
                &lt;username&gt;dbuser&lt;/username&gt;
                &lt;password&gt;secret&lt;/password&gt;
                &lt;dbname&gt;dbname&lt;/dbname&gt;
            &lt;/params&gt;
        &lt;/database&gt;
    &lt;/production&gt;
    &lt;staging extends=&quot;production&quot;&gt;
        &lt;database&gt;
            &lt;params&gt;
                &lt;host&gt;dev.example.com&lt;/host&gt;
                &lt;username&gt;devuser&lt;/username&gt;
                &lt;password&gt;devsecret&lt;/password&gt;
            &lt;/params&gt;
        &lt;/database&gt;
    &lt;/staging&gt;
&lt;/configdata&gt;
</pre>


        <div class="example-contents"><p>
            Em seguida, suponha que o desenvolvedor do aplicativo necessite dos dados de
            configuração de testes do arquivo <acronym class="acronym">XML</acronym>. É o simples caso de carregar
            esses dados especificando o arquivo <acronym class="acronym">XML</acronym> e a seção de testes:
        </p></div>

        <pre class="programlisting brush: php">
$config = new Zend_Config_Xml(&#039;/path/to/config.xml&#039;, &#039;staging&#039;);

echo $config-&gt;database-&gt;params-&gt;host;   // prints &quot;dev.example.com&quot;
echo $config-&gt;database-&gt;params-&gt;dbname; // prints &quot;dbname&quot;
</pre>

    </div>

    <div class="example" id="zend.config.adapters.xml.example.attributes"><div class="info"><p><b>Example #2 Usando os Atributos de Tag no Zend_Config_Xml</b></p></div>
        

        <div class="example-contents"><p>
            <span class="classname">Zend_Config_Xml</span> também suporta outras duas maneiras para definir
            os nós na configuração. Ambas fazem uso de atributos. A partir do momento que os
            atributos <em class="emphasis">extends</em> e <em class="emphasis">value</em> são palavras-chaves
            reservadas (o último através segunda maneira de uso dos atributos), eles não poderão
            ser utilizados. A primeira maneira usar os atributos é adicionar um nó pai, assim eles
            serão interpretados como um filho deste nó:
        </p></div>

        <pre class="programlisting brush: xml">
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;configdata&gt;
    &lt;production webhost=&quot;www.example.com&quot;&gt;
        &lt;database adapter=&quot;pdo_mysql&quot;&gt;
            &lt;params host=&quot;db.example.com&quot; username=&quot;dbuser&quot; password=&quot;secret&quot;
                    dbname=&quot;dbname&quot;/&gt;
        &lt;/database&gt;
    &lt;/production&gt;
    &lt;staging extends=&quot;production&quot;&gt;
        &lt;database&gt;
            &lt;params host=&quot;dev.example.com&quot; username=&quot;devuser&quot;
                    password=&quot;devsecret&quot;/&gt;
        &lt;/database&gt;
    &lt;/staging&gt;
&lt;/configdata&gt;
</pre>


        <div class="example-contents"><p>
            A outra maneira não encurta realmente a configuração, mas a torna mais fácil para
            manter, pois você não tem que escrever o nome da tag duas vezes. Você simplesmente cria
            uma tag vazia com o valor no atributo <em class="emphasis">value</em>:
        </p></div>

        <pre class="programlisting brush: xml">
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;configdata&gt;
    &lt;production&gt;
        &lt;webhost&gt;www.example.com&lt;/webhost&gt;
        &lt;database&gt;
            &lt;adapter value=&quot;pdo_mysql&quot;/&gt;
            &lt;params&gt;
                &lt;host value=&quot;db.example.com&quot;/&gt;
                &lt;username value=&quot;dbuser&quot;/&gt;
                &lt;password value=&quot;secret&quot;/&gt;
                &lt;dbname value=&quot;dbname&quot;/&gt;
            &lt;/params&gt;
        &lt;/database&gt;
    &lt;/production&gt;
    &lt;staging extends=&quot;production&quot;&gt;
        &lt;database&gt;
            &lt;params&gt;
                &lt;host value=&quot;dev.example.com&quot;/&gt;
                &lt;username value=&quot;devuser&quot;/&gt;
                &lt;password value=&quot;devsecret&quot;/&gt;
            &lt;/params&gt;
        &lt;/database&gt;
    &lt;/staging&gt;
&lt;/configdata&gt;
</pre>

    </div>

    <blockquote class="note"><p><b class="note">Note</b>: <span class="info"><b>Strings XML</b><br /></span>
        

        <p class="para">
            <span class="classname">Zend_Config_Xml</span> é capaz de carregar uma string
            <acronym class="acronym">XML</acronym> diretamente, por exemplo, uma que foi recuperada de um banco de
            dados. A string é passada como primeiro parâmetro para o construtor e deve começar com
            os caracteres <em class="emphasis">&#039;&lt;?xml&#039;</em>:
        </p>

        <pre class="programlisting brush: xml">
$string = &lt;&lt;&lt;EOT
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;config&gt;
    &lt;production&gt;
        &lt;db&gt;
            &lt;adapter value=&quot;pdo_mysql&quot;/&gt;
            &lt;params&gt;
                &lt;host value=&quot;db.example.com&quot;/&gt;
            &lt;/params&gt;
        &lt;/db&gt;
    &lt;/production&gt;
    &lt;staging extends=&quot;production&quot;&gt;
        &lt;db&gt;
            &lt;params&gt;
                &lt;host value=&quot;dev.example.com&quot;/&gt;
            &lt;/params&gt;
        &lt;/db&gt;
    &lt;/staging&gt;
&lt;/config&gt;
EOT;

$config = new Zend_Config_Xml($string, &#039;staging&#039;);
</pre>

    </p></blockquote>

    <blockquote class="note"><p><b class="note">Note</b>: <span class="info"><b>Namespace XML do Zend_Config</b><br /></span>
        

        <p class="para">
            <span class="classname">Zend_Config</span> vem com sua próprio namespace <acronym class="acronym">XML</acronym>,
            que adiciona funcionalidade adicional ao processo de análise. Para aproveitá-la, você
            tem que definir um namespace com o namespace <acronym class="acronym">URI</acronym>
            <var class="filename">http://framework.zend.com/xml/zend-config-xml/1.0/</var> em seu nó raiz
            de configuração.
        </p>

        <p class="para">
            Com o namespace habilitado, você pode usar constantes do <acronym class="acronym">PHP</acronym> dentro
            de arquivos de configuração. Além disso, o atributo <em class="emphasis">extends</em> foi
            transferido para um novo namespace e está depreciado no namespace
            <b><tt>NULL</tt></b>. Ele será completamente removido no Zend Framework 2.0.
        </p>

        <pre class="programlisting brush: xml">
$string = &lt;&lt;&lt;EOT
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;config xmlns:zf=&quot;http://framework.zend.com/xml/zend-config-xml/1.0/&quot;&gt;
    &lt;production&gt;
        &lt;includePath&gt;
            &lt;zf:const zf:name=&quot;APPLICATION_PATH&quot;/&gt;/library&lt;/includePath&gt;
        &lt;db&gt;
            &lt;adapter value=&quot;pdo_mysql&quot;/&gt;
            &lt;params&gt;
                &lt;host value=&quot;db.example.com&quot;/&gt;
            &lt;/params&gt;
        &lt;/db&gt;
    &lt;/production&gt;
    &lt;staging zf:extends=&quot;production&quot;&gt;
        &lt;db&gt;
            &lt;params&gt;
                &lt;host value=&quot;dev.example.com&quot;/&gt;
            &lt;/params&gt;
        &lt;/db&gt;
    &lt;/staging&gt;
&lt;/config&gt;
EOT;

define(&#039;APPLICATION_PATH&#039;, dirname(__FILE__));
$config = new Zend_Config_Xml($string, &#039;staging&#039;);

echo $config-&gt;includePath; // Prints &quot;/var/www/something/library&quot;
</pre>

    </p></blockquote>
</div>
        <hr />

            <table width="100%">
                <tr>
                    <td width="25%" style="text-align: left;">
                    <a href="zend.config.adapters.json.html">Zend_Config_Json</a>
                    </td>

                    <td width="50%" style="text-align: center;">
                        <div class="up"><span class="up"><a href="zend.config.html">Zend_Config</a></span><br />
                        <span class="home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></span></div>
                    </td>

                    <td width="25%" style="text-align: right;">
                        <div class="next" style="text-align: right; float: right;"><a href="zend.config.adapters.yaml.html">Zend_Config_Yaml</a></div>
                    </td>
                </tr>
            </table>
</td>
        <td style="font-size: smaller;" width="15%"> <style type="text/css">
#leftbar {
	float: left;
	width: 186px;
	padding: 5px;
	font-size: smaller;
}
ul.toc {
	margin: 0px 5px 5px 5px;
	padding: 0px;
}
ul.toc li {
	font-size: 85%;
	margin: 1px 0 1px 1px;
	padding: 1px 0 1px 11px;
	list-style-type: none;
	background-repeat: no-repeat;
	background-position: center left;
}
ul.toc li.header {
	font-size: 115%;
	padding: 5px 0px 5px 11px;
	border-bottom: 1px solid #cccccc;
	margin-bottom: 5px;
}
ul.toc li.active {
	font-weight: bold;
}
ul.toc li a {
	text-decoration: none;
}
ul.toc li a:hover {
	text-decoration: underline;
}
</style>
 <ul class="toc">
  <li class="header home"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></li>
  <li class="header up"><a href="manual.html">Guia de Refer&ecirc;ncia do Programador</a></li>
  <li class="header up"><a href="reference.html">Refer&ecirc;ncia do Zend Framework</a></li>
  <li class="header up"><a href="zend.config.html">Zend_Config</a></li>
  <li><a href="zend.config.introduction.html">Introdu&ccedil;&atilde;o</a></li>
  <li><a href="zend.config.theory_of_operation.html">Teoria de Opera&ccedil;&atilde;o</a></li>
  <li><a href="zend.config.adapters.ini.html">Zend_Config_Ini</a></li>
  <li><a href="zend.config.adapters.json.html">Zend_Config_Json</a></li>
  <li class="active"><a href="zend.config.adapters.xml.html">Zend_Config_Xml</a></li>
  <li><a href="zend.config.adapters.yaml.html">Zend_Config_Yaml</a></li>
 </ul>
 </td>
    </tr>
</table>

<script type="text/javascript" src="../js/shCore.js"></script>
<script type="text/javascript" src="../js/shAutoloader.js"></script>
<script type="text/javascript" src="../js/main.js"></script>

</body>
</html>